#include <typescommon.h>
#include <stdarg.h>
// fopen,fprintf,fscanf,fseek,ftell,fwrite,fread，fclose
// fprintf就跟printf类似，输出到文件。优点明文。
// fopen打开目录文件
// fseek配置文件中要操作的位置。
// ftell当前操作的位置。
// fwrite写入文件。
// fread读文件。
// fgets读一行，需要明文。
// fclose 关闭文件。
// fflush 系统会将写入文件的数据放到内存缓存区，后面才会写入硬盘。如果要立即同步到硬盘的文件，用fflush。fflush(stdout);立即输出到终端。

// fopen打开标志。
//  r
//  以只读方式打开文件，该文件必须存在。
//  r+
//  以读/写方式打开文件，该文件必须存在。
//  rb+
//  以读/写方式打开一个二进制文件，只允许读/写数据。
//  rt+
//  以读/写方式打开一个文本文件，允许读和写。
//  w
//  打开只写文件，若文件存在则文件长度清为零，即该文件内容会消失；若文件不存在则创建该文件。
//  w+
//  打开可读/写文件，若文件存在则文件长度清为零，即该文件内容会消失；若文件不存在则创建该文件。
//  a
//  以附加的方式打开只写文件。若文件不存在，则会创建该文件；如果文件存在，则写入的数据会被加到文件尾后，即文件原先的内容会被保留（EOF 符保留）。
//  a+
//  以附加方式打开可读/写的文件。若文件不存在，则会创建该文件，如果文件存在，则写入的数据会被加到文件尾后，即文件原先的内容会被保留（EOF符不保留）。
//  wb
//  以只写方式打开或新建一个二进制文件，只允许写数据。
//  wb+
//  以读/写方式打开或新建一个二进制文件，允许读和写。
//  wt+
//  以读/写方式打开或新建一个文本文件，允许读和写。
//  at+
//  以读/写方式打开一个文本文件，允许读或在文本末追加数据。
//  ab+
//  以读/写方式打开一个二进制文件，允许读或在文件末追加数据。

// fseek(tmpfile, 0, SEEK_SET);
// SEEK_SET 表示从文件起始位置增加 offset 个偏移量为新的读写位置；
// SEEK_CUR 表示从目前的读写位置增加 offset 个偏移量为新的读写位置；
// SEEK_END 表示将读写位置指向文件尾后，再增加 offset 个偏移量为新的读写位置。

int main(int argc, char **argv)
{
    FILE *tmpfile;
    tmpfile = fopen("/tmp/checkFile.txt", "w+");
    if (!tmpfile)
    {
        logerror("");
        return -1;
    }
    char tmpbuffer[128];
    // memcpy(tmpbuffer, "my check text\n\0", sizeof("my check text\n\0"));
    snprintf(tmpbuffer, sizeof(tmpbuffer), "my check text\n"); // snprintf()会自动添加'\0'
    fwrite(tmpbuffer, strlen(tmpbuffer), 1, tmpfile);
    fflush(tmpfile);
    memset(tmpbuffer, 0, sizeof(tmpbuffer));
    // fwrite已经将操作位置写到最后，需要读取fwrite写入的数据，需要配置操作光标。
    fseek(tmpfile, 0, SEEK_SET);
    fread(tmpbuffer, sizeof(tmpbuffer), 1, tmpfile);
    logdebug("%s", tmpbuffer);
    fclose(tmpfile);
    return 1;
}
